var obj = {a:1}
var obj2 = JSON.parse(JSON.stringify(obj)); // json.parse 返回一个新对象
// 深拷贝  json.parse json.stringify   遍历递归法
// 浅拷贝  Object.assign [...arr] {...obj} 

var num = 1;
var num2 = num;
num2 = 2;
obj2.a = 2;
console.log(obj.a, 'obj.a')
console.log(num, 'num')


var a = 1;
// 3
function add() {
    // 2
    var b= 2;
    console.log(a)
    function add2() {
        // 1
        console.log(a)
    }
}
console.log(b)

// 原型链
// 对象 __proto__ => 构造函数的prototype
// 函数 prototype
var obj = {}; // new Object()
// obj.a  => {} => __proto__ => Object的prototype => null


function App() {

}
// App.prototype
var app = new App();

// app.a => app.__proto__ => App.prototype (本身是一个对象) => {} => __proto__ => new Object.prototype => null





// 作用域
// ES5
// function(}{}
// ES6 
// {

// }
// let变量 const 常量  
// 相比var 没有声明提示  默认生成一个块级作用域 



for(var i = 0; i<10;i++) {
    setTimeout(() => {
        console.log(i)
    },0)
}


for(let i = 0; i<10;i++) {
    setTimeout(() => {
        console.log(i)
    },0)
}


// async await 底层是 Generator 

function* app () {
    yield 1;
    yield 2;
    yield 3;
    return 4;
}
var a = app()
console.log(a.next())
console.log(a.next())
console.log(a.next())
console.log(a.next())

// export 
// export default

// import '../'
// import xx from 'xx'